#include <iostream>

int main(){
    using namespace std;
    int* p = nullptr;       // 指针如果不能立马赋值，就应当初始化为0
    cout<<sizeof(p)<<endl;;    // 8B
    // c风格申请内存
    int* q = (int*)malloc(4*sizeof(int));
    if(q){       // 如果内存申请成功
        for(int i=0;i<4;i++){
            q[i] = i*i;
            cout<<q[i]<<"\t";
        }
    }
    free(q);      // 必须对内存进行释放，但此时q存储的地址内容没有发生变化
    // c++风格申请内存
    int* d = new int[3];    // 动态内存申请，运行阶段
    d[0] = 1;
    d[1] = 2;
    d[2] = 3;
    cout<<d<<endl;
    cout<<*d<<endl;     // 1
    d++;
    cout<<d<<endl;
    cout<<*d<<endl;    // 2
    d--;
    cout<<d<<endl;
    cout<<sizeof(d)<<"\t";    // 返回指针大小8
    int a[] = {1,2,3};
    cout<<sizeof(a)<<endl;   // 返回数组大小12
    // 警惕给指针重复赋值，防止内存泄漏；应该在释放完内存后再对指针进行赋值
    delete[] d;

    return 0;
}